// MainMenuScreen
#include "MainMenuScreen.h"

// Engine
#include "Engine.h"

// Physics
#include "HavokWrapper.h"


namespace GamePipeGame
{
	//GameObjectManager* havokManager;

	//////////////////////////////////////////////////////////////////////////
	// MainMenuScreen(std::string name)
	//////////////////////////////////////////////////////////////////////////
	MainMenuScreen::MainMenuScreen(std::string name) : GamePipe::GameScreen(name)
	{
		SetBackgroundUpdate(true);
		SetBackgroundDraw(true);
		SetIsPopup(false);
	}

	//////////////////////////////////////////////////////////////////////////
	// Load()
	//////////////////////////////////////////////////////////////////////////
	bool MainMenuScreen::LoadResources()
	{
		GamePipe::ResourceManager::GetInstanceRef().LoadResourceGroup("General");
		return true;
	}

	//////////////////////////////////////////////////////////////////////////
	// Unload()
	//////////////////////////////////////////////////////////////////////////
	bool MainMenuScreen::UnloadResources()
	{
		GamePipe::ResourceManager::GetInstanceRef().UnloadResourceGroup("General");
		GamePipe::ResourceManager::GetInstanceRef().UnloadResourceGroup("General");
		return true;
	}

	//////////////////////////////////////////////////////////////////////////
	// Initialize()
	//////////////////////////////////////////////////////////////////////////
	bool MainMenuScreen::Initialize()
	{
		GetGameObjectManager()->SetVisualDebugger(true);

		SetBackgroundColor(Ogre::ColourValue(0.3921, 0.5843, 0.9294, 1.0000));

		m_fCameraMovementSpeed = 50.0;
		m_fCameraRotationSpeed = 5.0;

		Ogre::SceneManager* pSceneManager = GetDefaultSceneManager();
		pSceneManager->setAmbientLight(Ogre::ColourValue(0.5000, 0.5000, 0.5000, 0.5000));

		LoadScene("MainMenuScreen.scene");		
	
		//TODO-SV: delete GameObject when an Entity is deleted in GLE cant be done yet
		return true;
	}

	//////////////////////////////////////////////////////////////////////////
	// Destroy()
	//////////////////////////////////////////////////////////////////////////
	bool MainMenuScreen::Destroy()
	{
		return true;
	}

	//////////////////////////////////////////////////////////////////////////
	// Show()
	//////////////////////////////////////////////////////////////////////////
	bool MainMenuScreen::Show()
	{
		Ogre::Camera* pCamera = GetActiveCamera();
		Ogre::Viewport* viewport = EnginePtr->GetRenderWindow()->addViewport(pCamera, EnginePtr->GetFreeViewportIndex());
		viewport->setBackgroundColour(GetBackgroundColor());
		viewport->setOverlaysEnabled(true);
		SetViewport(viewport);

		pCamera->setAspectRatio(static_cast<Ogre::Real>(viewport->getActualWidth()) / static_cast<Ogre::Real>(viewport->getActualHeight()));

		return true;
	}

	//////////////////////////////////////////////////////////////////////////
	// Update()
	//////////////////////////////////////////////////////////////////////////
	bool MainMenuScreen::Update()
	{
	
		// Rotate Ogre Head
		if (GetDefaultSceneManager()->hasEntity("OgreHead"))
		{
			GetDefaultSceneManager()->getEntity("OgreHead")->getParentSceneNode()->yaw(Ogre::Degree(100 * EnginePtr->GetDeltaTime()));
		}

		// Update Camera
		FreeCameraMovement();

		return true;
	}

	//////////////////////////////////////////////////////////////////////////
	// Draw()
	//////////////////////////////////////////////////////////////////////////
	bool MainMenuScreen::Draw()
	{
		return true;
	}

	bool MainMenuScreen::OnKeyPress(const GIS::KeyEvent& keyEvent)
	{
		switch(keyEvent.key)
		{
		case GIS::KC_ESCAPE:
			{
				Close();
				break;
			}
			
		case GIS::KC_SYSRQ:
			{
				SaveScene("..\\..\\522GameDemo\\Media\\scenes\\saved.scene");
				break;
			}
		}

		return true;
	}



	
}